Skip to content

Add MiniMax Text model support#4662

Open
yicycyc wants to merge 1 commit into
PaddlePaddle:developfrom
yicycyc:feat/minimax-text-01-clean
Open

Add MiniMax Text model support#4662
yicycyc wants to merge 1 commit into
PaddlePaddle:developfrom
yicycyc:feat/minimax-text-01-clean

Conversation

@yicycyc

@yicycyc yicycyc commented Jun 12, 2026

Copy link
Copy Markdown

PR 新增模型支持:MiniMax-Text-01

本 PR 新增 MiniMaxAI/MiniMax-Text-01 支持。复现对齐对象为 HuggingFace/Transformers 端 MiniMax 实现以及 ModelScope 上的原始 safetensors 权重。

主要改动

  • 新增 paddleformers/transformers/minimax/
    • MiniMaxConfig
    • MiniMaxModel
    • MiniMaxForCausalLM
    • MiniMaxForCausalLMPipe
    • RMSNorm、RoPE、full attention eager/cache
    • linear attention / lightning attention
    • sparse MoE router / expert MLP
    • Stage3 验证所需的固定 expert 遍历顺序和空 expert graph 连接开关
  • 注册 MiniMax-Text-01 到:
    • paddleformers.transformers
    • AutoConfig
    • AutoModelForCausalLM
  • 新增 MiniMax-Text-01 SFT 输入链路:
    • 新增 minimax template
    • 支持 MiniMax chat special token 格式
  • 权重加载:
    • MiniMaxPretrainedModel._gen_aoa_config 中实现 HF/ModelScope safetensors 到 PaddleFormers 权重的自动转换规则
    • MiniMaxPretrainedModel._gen_inv_aoa_config 中实现 PaddleFormers 到 safetensors 的反向映射规则
    • 用户可直接使用原始 safetensors 目录加载,无需手动运行离线权重转换脚本
  • 单测:
    • 新增 tests/transformers/minimax/test_modeling.py
    • 覆盖 tiny config、MiniMaxModel forward、MiniMaxForCausalLM loss/backward、AutoModelForCausalLM.from_config
  • 文档:
    • 更新 README 模型列表
    • 更新 docs/zh/model_capability.md 能力矩阵

Stage3 训练跑通方式在下方训练验证中说明,通用 Trainer / Optimizer 侧改动不纳入本 PR。

前向对齐验证

模型:MiniMaxAI/MiniMax-Text-01

验证模型为一层缩层模型:

  • num_hidden_layers = 1
  • 模型目录:/root/claude_workspace/minimax-text-01-layer0-ms
  • 当前目录包含一层缩层模型所需 shard,以及 embedding / lm-head 相关 shard
  • attention backend:两侧均使用 eager
  • embedding / input ids 路径已纳入最终验证

bf16 eager 最终 hidden states:

dtype shape max abs diff mean abs diff p99 abs diff cosine 结论
bf16 (1, 4, 6144) 0.0 0.0 0.0 1.00000083 对齐

fp32 eager :

dtype shape max abs diff mean abs diff p99 abs diff cosine 结论
fp32 (1, 4, 6144) 5.7220459e-06 2.5422841e-07 1.9073486e-06 1.00000012 对齐

说明:

  • bf16 eager 与之前 Transformers 4.57 对齐基准达到 0 diff。
  • fp32 eager 为 1e-6 量级误差,符合 fp32 算子执行差异预期。

训练验证

使用 GSM8K 做 BF16 full-SFT,Paddle 侧使用 sharding stage3,Torch 侧使用 ms-swift ZeRO-3。

共同设置:

  • max_length = 512
  • max_steps = 300
  • per_device_train_batch_size = 1
  • gradient_accumulation_steps = 1
  • learning_rate = 1e-5
  • lr_scheduler_type = constant
  • warmup_steps = 0
  • weight_decay = 0
  • shuffle 关闭
  • attention eager
  • full-parameter SFT
  • 可训练参数量:8,146,085,888

loss 曲线如下:

minimax_gsm8k_len512_300_loss_compare

结论:

  • 两侧首步 loss 均为 27.x,没有出现异常 loss scale。
  • 300 steps 内两侧 loss 都稳定下降。

Stage3 / ZeRO3 说明

MiniMax sparse MoE 会根据 token 动态选择 expert。Stage3 / ZeRO3 下,如果不同 rank 只执行本 rank 命中的 expert,不同 rank 的 expert 执行顺序可能不一致,从而导致 collective 顺序不一致、训练卡住或梯度状态异常。

本地成功验证使用:

  • 固定 expert 遍历顺序
  • 对空 expert 加零贡献,使其保持在 autograd graph 中
  • 8 卡 Paddle sharding stage3
  • ms-swift ZeRO-3 中将 MiniMax sparse MoE block 作为 leaf module

生成对齐

使用真实文本输入做 greedy generation,对齐对象为 Transformers 4.57.6 MiniMax 实现。

输入:

用户:请用一句话介绍杭州。
助手:

输入 token:

[8526, 192831, 829, 49864, 10201, 30860, 487, 75827, 861]

bf16 生成前 10 个 token:

dtype HF tokens Paddle tokens 是否一致
bf16 [162551, 197066, 109245, 4698, 7169, 29897, 4791, 69130, 190900, 177743] [162551, 197066, 109245, 4698, 7169, 29897, 4791, 69130, 190900, 177743]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant